package com.xiaoq.order.service;

import com.xiaoq.order.entity.OrderTourPipe;
import com.xiaoq.order.entity.ShopOrderEntity;
import com.xiaoq.order.vo.OrderQueryVo;
import com.xiaoq.order.vo.OrderTourPipeQueryVo;
import com.xiaoq.vo.PagingVo;
import org.mongodb.morphia.annotations.Indexed;

import java.util.List;

/**
 * Created by chenjh on 2017/11/7.
 */
public interface IShopOrderService {

    void saveShopOrder(ShopOrderEntity shopOrderEntity);

    /**
     * 根据用户Id和订单Id 获取具体的订单信息
     * @param shopOrderId
     * @param userId
     * @return
     */
    ShopOrderEntity getShopOrderById(String shopOrderId, String userId);

    /**
     *  根据orderID 获取order信息
     * @param orderId
     * @return
     */
    ShopOrderEntity getShopOrderByOrderId(String orderId);

    /**
     *  取消订单
     * @param shopOrderId 订单ID
     * @param userId 用户ID
     * @return
     */
    boolean cancelOrder(String shopOrderId, String userId);

    /**
     *  根据用户Id得到所有的用户订单
     * @param userId 用户ID
     * @param paystate 支付状态
     * @param userDeleteFlag 是否删除的订单（见ConstantUtil）
     * @param orderType 订单类型（见ConstantUtil）
     * @param orderState 订单状态（见ConstantUtil）
     * @return
     */
    List<ShopOrderEntity> getUserAllOrderByUserId(String userId, Integer paystate, String userDeleteFlag,Integer orderType, Integer orderState);

    /**
     *  根据讲解员ID，获取讲解员的所有订单
     * @param interpreterId 讲解员ID
     * @return
     */
    List<ShopOrderEntity> getInterpreterAllOrderByInterId(String interpreterId);

    /**
     *  根据shopOrder重的 shopOrderId更新shopOrder 信息
     * @param shopOrder 实体类
     * @return
     */
    boolean updateShopOrderByOrderId(ShopOrderEntity shopOrder);

    /**
     *  更新订单评论的状态
     * @param userId 用户ID
     * @param orderId 订单ID
     * @param skuCode skuCode
     * @param reviewState 评论的状态
     * @param orderState  后期可能有不同的订单类型（代表的意义不一样）
     * @return
     */
    int updateReviewStateInOrder(String userId, String orderId, String skuCode, int reviewState, int orderState);

    /**
     *  将订单状态的评论状态置为 
     * @param userId
     * @param shopOrderId
     * @param skuCode
     * @param orderState
     */
    void callBackReviewState(String userId, String shopOrderId, String skuCode,int orderState);

    /**
     *  根据userId和orderId删除用户订单
     * @param userId
     * @param shopOrderId
     * @return
     */
    boolean deleteUserOrderByUserIdAndOrderId(String userId, String shopOrderId);

    /**
     *  根据interId和orderId删除讲解员订单
     * @param interId 讲解员id
     * @param shopOrderId 订单ID
     * @return
     */
    boolean deleteInterOrderByInterIdAndOrderId(String interId, String shopOrderId);

    /**
     * 得到待付款,过期的所有订单
     * @param shopId 可为null, 店
     * @param orderType 可为null, 订单类型
     * @return
     */
    List<ShopOrderEntity> getNotPayExpiredShopOrderList(String shopId, Integer orderType);

    /**
     *  得到讲解员的订单（未删除的）
     * @param interpreterId 讲解员iD
     * @param orderState 订单状态 见OrderState
     * @param payState 支付状态 见PayState
     * @return
     */
    List<ShopOrderEntity> getInterpreterOrderList(String interpreterId, Integer orderState, Integer payState);

    /**
     *  后台查询用：
     *  获取某店的所有订单
     * @param orderQueryVo
     * @param pagingVo 分页参数
     * @return
     */
    List<ShopOrderEntity> getShopAllOrders(OrderQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     *  获取讲解员的订单信息
     * @param shopId 店 ID
     * @param payStatus  订单状态见PayStatus
     * @param interList 讲解员ID List
     * @return
     */
    List<ShopOrderEntity> getInterOrderList(String shopId, Integer payStatus,List<String> interList);


    /**
     * 后台查询用：
     *  得到店的所有订单数量
     * @param orderQueryVo
     * @param pagingVo
     * @return
     */
    long getShopAllOrdersCount(OrderQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     * @param shopId 店
     * @param couponCodeList 优惠券 couponInstanceCode
     * @return
     */
    List<ShopOrderEntity> getShopOrderList(String shopId, List<String> couponCodeList);


    /**
     * 游客一览查询接口
     * @param orderQueryVo 查询Vo
     * @param pagingVo
     * @return
     */
    List<OrderTourPipe> getShopAllOrders4Tour(OrderTourPipeQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     *  游客一览查询接口,总条数
     * @param orderQueryVo 查询vo
     * @return
     */
    long getShopAllOrders4TourCount(OrderTourPipeQueryVo orderQueryVo);

    /**
     * 定时任务用于更新下单人来自哪里
     *  得到用户已付款, userFrom 不存在的订单,
     * @param limit
     * @return
     */
    List<ShopOrderEntity> getPaidNotUserFromOrders(Integer limit);
}
